﻿using System;
using System.Collections.Generic;

using UnityEngine;

#if AL_CREATURE_SYS
namespace ALPackage
{
    /*************************
     * 保存所有用户动作对象的信息，以及获取的名称
     **/
    public class ALCreatureAdditionObj
    {
        /** 实际的物件对象 */
        protected GameObject gameObject;
        /** 对象的数据索引 */
        protected _AALSOBasicAdditionObjInfo _m_oiObjInfo;

        protected internal ALCreatureAdditionObj(_AALSOBasicAdditionObjInfo _additionObjInfo, GameObject _obj)
        {
            gameObject = _obj;
            _m_oiObjInfo = _additionObjInfo;
        }

        public string tag { get { return _m_oiObjInfo.objName; } }
        public GameObject go { get { return gameObject; } }

        /******************
         * 设置本附加物的有效性状态
         *
         **/
        public virtual bool active
        {
            get
            {
                if (null == go)
                    return false;

                return go.activeSelf;
            }
            set
            {
                if (null == go)
                    return;

                //与原先结果相同，则不进行处理
                if (go.activeSelf == value)
                    return;

                go.SetActive(value);

                //调用状态改变函数
                _onActiveChg(value);
            }
        }


        /*********************
         * 释放本对象的资源
         **/
        public void discard()
        {
            //删除对象
            _removeGameObject();
            //从父对象注销
            _unregFromParent();
        }

        /********************
         * 删除物件
         **/
        protected virtual internal void _removeGameObject()
        {
            if (null == gameObject)
                return;

            //释放对应的资源对象
            _m_oiObjInfo.discardObj(gameObject);

            gameObject = null;
        }

        /**************
         * 从父节点中去除本物件的关联
         **/
        protected virtual void _unregFromParent()
        {
            ALStaticAdditionObjMgr.instance._unregAdditionObj(this);
        }

        /*********************
         * 当有效状态变更时触发的函数
         **/
        protected virtual void _onActiveChg(bool _active)
        {
        }
    }
}
#endif
